package com.spic.business.train.trainInfo.service;

import com.spic.business.train.trainInfo.domain.TrainInfo;
import com.spic.business.train.trainInfo.dto.*;
import com.spic.common.core.exception.ServiceException;

import java.util.List;

/**
 * 培训信息Service接口
 *
 * @author spic
 * @date 2021-10-15
 */
public interface ITrainInfoService
{
    /**
     * 查询培训信息
     *
     * @param id 培训信息主键
     * @return 培训信息
     */
    public TrainInfo selectTrainInfoById(String id);

    /**
     * 查询培训信息列表
     *
     * @param trainInfo 培训信息
     * @return 培训信息集合
     */
    public List<TrainInfo> selectTrainInfoList(TrainListDto trainInfo);

   /* *//**
     * 查询培训信息 导出信息
     *
     * @param trainInfo 培训信息
     * @return 培训信息集合
     *//*
    public List<TrainInfo> selectTrainInfoListToexport(TrainInfo trainInfo);
*/


    /**
     * 新增培训信息
     *
     * @param trainInfoDto 培训信息
     * @return 结果
     */
    public int insertTrainInfo(TrainInfoDto trainInfoDto);


    /**
     * 修改培训信息
     *
     * @param trainInfoDto 培训信息
     * @return 结果
     */
    public int updateTrainInfo(TrainInfoDto trainInfoDto) throws ServiceException;

    /**
     * 批量删除培训信息
     *
     * @param ids 需要删除的培训方案主键
     * @return 结果
     */
    public int deleteTrainInfoByIds(String[] ids)throws ServiceException;

    /**
     * 删除培训信息信息
     *
     * @param id 培训信息主键
     * @return 结果
     */
    public int deleteTrainInfoById(String id);


    /**
     * 开启培训
     */
    int starTrainInfoByIds(String[] ids);

    /**
     * 修改状态
     */
    int updateTrainInfo(TrainInfo trainInfo);


    /**
     * 查询符合条件还没创建考试的培训
     */
    public List<TrainInfoVo>  selectTrainInfoListNotInexam();

    /**
     * 用户培训结束后判断培训是否结束
     *  @param id 培训信息主键
     */
    public void  updateTrainInfoforUserTrainEnd(String id);
    /**
     * 查询我的培训信息列表
     *
     * @param trainListDto 培训信息
     * @return 培训信息集合
     */

    List<TrainInfo> listByUserId(TrainListDto trainListDto);

    List<TrainInfoAPPVo> listByUserIdForApp(TrainInfoAPPDto trainInfoAPPDto);
    List<TrainInfoAPPVo> getListByTrainInfoForApp(TrainInfoAPPDto trainInfoAPPDto);

    List<TrainInfoAPPVo> getListByTrainInfoForAppCount(TrainInfoAPPDto trainInfoAPPDto);
}
